The exemplary embodiment relates generally to negotiations between autonomous devices. It finds particular application in conjunction with negotiation of print job outsourcing in a cluster printing system and will be described with particular reference thereto.
Many companies now have computer networks in which several computers are capable of communicating with each other and with other devices on the network. In an office environment, a limited number of resources, typically printers, are shared among several office workers. Such networks derive cost benefits by shared usage of the printers. Exceptions and conflicts can arise during processes taking place in such environments when accessing those shared resources. For example, in situations in which a stand-alone printer malfunctions, it is typical for print jobs assigned to the printer not to be completed, even though available printing capacity may exist elsewhere in the network.
Network printing systems now exist which are configured for sending a print job to another printer when a printer to which a print job has been sent is, for some reason, not currently capable of performing the print job. When a user selects a non-functional printer for performing a print job, the user is often unaware that the printer has malfunctioned until the user walks over to the network printer that was given the print job. In some applications, the user is informed of a switch of the print job to the other printer (by e-mail or by web page notification), and can walk to the location of the other printer in order to pick up the print job when it is completed.
Negotiation has been used for the coordination of autonomous resources in distributed applications. Generic models exist which can specify and organize the interactions among the resource involved in a negotiation process (e.g., contract nets, auctions with their many variants, bi-lateral negotiations, etc.).
Different mechanisms exist which address the issue of making informed decisions relevant to a negotiation from the point of view of the individual resources that participate in a negotiation. The purpose of these decisions is primarily to make sure that the negotiation remains within the limits of a space of “authorized” solutions (the exact meaning of which is determined by the component making the decisions), and possibly also to orient the negotiation, within that space, towards some “optimal” solutions (again, in the sense of the component making the decisions).
Constraint solvers have been used to delimit the space of solutions authorized by a component in a negotiation. Generally, constraints may be used to express problems in a declarative way. Constraint solvers are generic tools capable of detecting constraint violations, but also inferring new constraints from existing ones. The basis for the cooperation between constraint solvers generally involves exchanging information linked to shared variables. This mechanism has been generalized and incorporated into generic agent argumentation systems typically for distributed problem solving. While constraint solvers are useful, generic tools capable of automating some of the processes taking place in negotiation based applications, their integration in such applications requires some form of encapsulation to turn them into effective negotiators capable of fully taking part in a negotiation process. Constraint solvers have been used to delimit the space of solutions by a component in a negotiation in a prescriptive way by specifying the situations which are not authorized (i.e., those which violate some of the constraints).